//不等待线程会有类似僵尸进程的问题,等待又得阻塞等, 但主线程就是不想等待，不关心新线程的状态, 直接做其他事情
//线程是可以被设置为分离状态的, 线程默认是joinable状态的!

//基本上写的程序，main函数跑完，就结束的, 这是我们自己在练习
//但是做软件的，很多软件一旦开启，就再也不退出了, 除非用户手动关掉
//网易云音乐，cctalk..., 半夜打游戏(服务器一直在运行)
//软件一直运行才是常态(死循环), OS也是个死循环

//如果新线程的资源需要回收，那就等待...
//如果不想回收，就是等软件退出的时候释放资源，那就把线程设置为可分离的状态，主线程专注自己事情即可， 一旦创建了新线程，以后直接不管!

//什么叫做线程分离???
//家庭成员之间就是joinbale(你夜不归宿，爸妈要关心，甚至要放下手里的工作)
//家庭一大，总有和父母关系不好, 说要跟父母分家，分家之后，就没有关系了!!互不关心了!
//建议主线程是整个系统中最后退出的!

//线程再怎么分离，和其他线程都要共享资源; 线程再怎么分离，一个线程有问题，也会影响其他线程; 

//分家时，可以是儿子说，也可以是老爹说


//新线程中线程分离
#include <iostream>
#include <pthread.h>
#include <unistd.h>
using namespace std;

void* threadRoutine(void* args)
{
    pthread_detach(pthread_self()); //参数表示哪个线程要进行分离
    int cnt = 5;
    while(cnt--)
    {
        cout << "thread is running..." << endl;
        sleep(1);
    }
    return nullptr;
}

int main()
{
    pthread_t tid;
    pthread_create(&tid, nullptr, threadRoutine, nullptr);
    sleep(1);
    int n = pthread_join(tid, nullptr); //等待新线程成功，返回0，等待新线程失败，返回错误码
    cout << "new thread return: " << n << endl;
    return 0;
}